//
//  HMComposeTextView+Extension.swift
//  Weibo22
//
//  Created by Apple on 16/12/12.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit

extension HMComposeTextView {
    
    
    //  获取富文本对应的字符串内容
    var emoticonText: String {
    
        var result = ""
        //  遍历富文本
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: [], using: {(info, range, _) -> Void in
            //  info : 富文本的信息
            //  range: 富文本的范围
            print(info)
            print(NSStringFromRange(range))
            
            if let attachment = info["NSAttachment"] as? HMTextAttachment {
                //  图片表情富文本
                let chs = attachment.emoticon?.chs
                result += chs!
            } else {
                //  内容富文本
                //  通过返回获取对应范围的富文本
                //  通过string属性获取富文本对应的字符串
                let text = self.attributedText.attributedSubstring(from: range).string
                result += text
            }
            
            
            
            
            
        })
        
        return result
    
    }

    //  根据模型设置表情显示
    func insertEmoticon(emoticon: HMEmoticon) {
    
        if emoticon.type == "0" {
            //  图片表情
            print(emoticon.chs!)
            //            textView.insertText(emoticon.chs!)
            
            //  图片转成富文本的步骤
            
            //  记录上一次的富文本
            let lastAttributedString = NSMutableAttributedString(attributedString: self.attributedText)
            
            
//            //  1. 通过图片名(图片路径)创建UIImage对象
//            let image = UIImage(named: emoticon.path!)
//            
//            //  2. 根据UIImage对象创建文本附件(NSTextAttachment)
//            let attachment = HMTextAttachment()
//            //  设置文本附件的图片
//            attachment.image = image
//            //  设置文本附件对应的表情模型
//            attachment.emoticon = emoticon
//            
//            //  文字高度
//            let lineHeight = self.font!.lineHeight
//            //  设置图片大小 (设置bounds 会影响子控件的布局)
//            attachment.bounds = CGRect(x: 0, y: -4, width: lineHeight, height: lineHeight)
//            
//            //  3. 根据富文本附件创建富文本(NSAttributedString)
//            let attributedStr = NSAttributedString(attachment: attachment)
            //  使用NSAttributedString的扩展创建富文本
            let attributedStr = NSAttributedString.attributeStringWithEmoticon(emoticon: emoticon, font: self.font!)
            
            
            //  追加富文本
            //            lastAttributedString.append(attributedStr)
            
            //  获取选中的范围
            var range = self.selectedRange
            //  替换选中范围的富文本
            lastAttributedString.replaceCharacters(in: range, with: attributedStr)
            
            
            
            //  设置富文本的字体大小
            lastAttributedString.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, lastAttributedString.length))
            
            //  4. 设置富文本(attributedText)
            self.attributedText = lastAttributedString
            
            //  设置选中范围的光标位置
            range.location += 1
            //  设置范围长度
            range.length = 0
            
            //  设置光标位置
            self.selectedRange = range
            
            //  发送文字改变的通知
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            //  使用调用代理方法
            //  这里使用!也是没有问题的,因为我们已经实现了这个代理方法
            //  textViewDidChange 是这个协议的可选的代理方法,可以不用实现,如果使用了! 表示我确定我的这个方法一定实现了, 如果没有实现就会崩溃
            //  ? 使用判断这个方法是否实现如果没有显示直接返回nil,不会崩溃
            self.delegate?.textViewDidChange?(self)
            
            
        } else {
            //  emoji
            print((emoticon.code! as NSString).emoji())
            self.insertText((emoticon.code! as NSString).emoji())
        }
    }
    
    

}
